package cn.iocoder.yudao.module.ocr.service.result;

import cn.hutool.core.lang.Console;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.ocr.controller.admin.result.vo.ResultPageReqVO;
import cn.iocoder.yudao.module.ocr.controller.admin.result.vo.ResultSaveReqVO;
import cn.iocoder.yudao.module.ocr.dal.dataobject.result.ResultDO;
import cn.iocoder.yudao.module.ocr.dal.mysql.result.ResultMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * ocr结果 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class ResultServiceImpl implements ResultService {

    @Resource
    private ResultMapper resultMapper;

    @Override
    public Long createResult(ResultSaveReqVO createReqVO) {
        // 插入
        ResultDO result = BeanUtils.toBean(createReqVO, ResultDO.class);
        Map<String,Object> paramMap= new HashMap<>();
        paramMap.put("filePath",createReqVO.getOriUrl());
        //链式构建请求
        String result2 = HttpRequest.post("https://dev.zjwocai.com/zssj-api/lrs/pdf_ocr")
                .header(Header.USER_AGENT, "Hutool http")//头信息，多个头信息多次调用此方法即可
                .form(paramMap)//表单内容
                .timeout(20000)//超时，毫秒
                .execute().body();
        Console.log(result2);

        resultMapper.insert(result);
        // 返回
        return result.getId();
    }

    @Override
    public void updateResult(ResultSaveReqVO updateReqVO) {
        // 校验存在
        validateResultExists(updateReqVO.getId());
        // 更新
        ResultDO updateObj = BeanUtils.toBean(updateReqVO, ResultDO.class);
        resultMapper.updateById(updateObj);
    }

    @Override
    public void deleteResult(Long id) {
        // 校验存在
        validateResultExists(id);
        // 删除
        resultMapper.deleteById(id);
    }

    private void validateResultExists(Long id) {
        if (resultMapper.selectById(id) == null) {
//            throw exception(RESULT_NOT_EXISTS);
        }
    }

    @Override
    public ResultDO getResult(Long id) {
        return resultMapper.selectById(id);
    }

    @Override
    public PageResult<ResultDO> getResultPage(ResultPageReqVO pageReqVO) {
        return resultMapper.selectPage(pageReqVO);
    }

}
